package com.unlcn.ils.kas.service.order;

import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.IService;
import com.unlcn.ils.kas.dao.model.order.Customer;
import com.unlcn.ils.kas.dao.model.order.OrderOtd;
import com.unlcn.ils.kas.dao.model.order.OrderOtdDetail;
import com.unlcn.ils.kas.dao.model.order.bo.*;
import com.unlcn.ils.kas.service.bo.ErpOrderSelectHead;

import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;

/**
 * 订单在途跟踪 服务类
 * 
 * @author 罗必量
 * @since 2018-03-06
 */
public interface OrderOtdService extends IService<OrderOtd> {

    /**
     * 订单分页列表
     * 
     * @param page
     * @return
     */
    Page<OrderLineBo> queryPage(Page<OrderOtd> page);

    /**
     * 查找编辑信息
     * 
     * @param id
     * @return
     */
    OrderModifyInfoBo findModifyInfo(Long id);

    /**
     * 编辑订单信息
     * 
     * @param orderModifyInfoBo
     */
    void modifyInfo(OrderModifyInfoBo orderModifyInfoBo);

    /**
     * 保存明细
     * 
     * @param orderOtdDetail
     */
    void saveDetail(OrderOtd OrderOtd, OrderOtdDetail orderOtdDetail);

    /**
     * 根据地址获取经纬度
     * 
     * @param address
     * @return
     */
    Map<String, Object> getLatLon(String address, String endAddress);

    /**
     * 获取客户
     * 
     * @return
     */
    List<Customer> getCustomer();

    /**
     * 订单查询
     * 
     * @param startTime
     * @param endTime
     * @param customerNo
     * @return
     */
    List<ErpOrderSelectHeadBo> orderSelect(Long startTime, Long endTime, String customerNo);

    /**
     * 根据客户订单号或者中联订单号查询客户订单
     * 
     * @param customerCode
     * @return
     * @throws Exception
     */
    List<OrderOtd> getKasOrderOtdByCustomerOtdList(String customerCode) throws Exception;

    /**
     * 查询（接口）订单列表
     * 
     * @param request
     * @param params
     * @return
     */
    List<OrderForCustcomerBo> selectListByConditionsForCust(HttpServletRequest request, Map<String, Object> params)
            throws Exception;

    /**
     * 获取运输方式
     * 
     * @return
     */
    List<String> getTransportType();

    /**
     * 获取无车承运人
     * 
     * @return
     */
    List<String> getSupplier();

    /**
     * 获取经销商
     * 
     * @return
     */
    List<String> getDealerName();

    /**
     * 获取发运类型
     * 
     * @return
     */
    List<String> getShipmentType();

    /**
     * 获取某时间段订单号
     * 
     * @param startTime
     * @param endTime
     * @param customerNo
     * @return
     */
    List<String> getOrderNo(Long startTime, Long endTime, String customerNo);

    /**
     * 根据订单号获取订单详情
     * 
     * @param sysOrderNo
     * @return
     */
    ErpOrderSelectHead getOrderDetail(String sysOrderNo);

    /**
     * 导入更新
     * 
     * @param orderOtd
     */
    void importUpdate(OrderOtd orderOtd);

    /**
     * 异常订单列表
     * 
     * @param page
     * @param ew
     * @return
     */
    List<OrderOtd> exceptionLine(Page<OrderOtd> page, Wrapper<OrderOtd> ew);

    /**
     * 导出异常订单数据
     * 
     * @param customerNo
     * @param classCode
     * @param onWayExceptionBo
     * @return
     */
    List<OrderOtd> exportExceptionData(Integer customerNo, Integer classCode, OnWayExceptionBo onWayExceptionBo);
}
